#region Copyright (c) 2003-2005, Luke T. Maxon

/********************************************************************************************************************
'
' Copyright (c) 2003-2005, Luke T. Maxon
' All rights reserved.
' 
' Redistribution and use in source and binary forms, with or without modification, are permitted provided
' that the following conditions are met:
' 
' * Redistributions of source code must retain the above copyright notice, this list of conditions and the
' 	following disclaimer.
' 
' * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
' 	the following disclaimer in the documentation and/or other materials provided with the distribution.
' 
' * Neither the name of the author nor the names of its contributors may be used to endorse or 
' 	promote products derived from this software without specific prior written permission.
' 
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
' WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
' PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
' ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
' LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
' INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
' OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
' IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'
'*******************************************************************************************************************/

#endregion

using System;
using System.Windows.Forms;

namespace NUnit.Extensions.Forms
{
    /// <summary>
    /// A ControlTester for testing forms.
    /// 
    /// This class implements a Close() helper method to close a form that you find.
    /// </summary>
    /// <remarks>
    /// This class does not have all of the constructors because they don't make
    /// sense in this context.</remarks>
    public class FormTester : ControlTester<Form, FormTester>, IDisposable
    {
        private bool explicitlyClosed;

        public FormTester()
        {
        }

        public FormTester(string name) : base(name)
        {
        }

        /// <summary>
        /// Gets or sets the dialog result for the form.
        /// </summary>
        /// <returns>
        /// A <c>System.Windows.Forms.DialogResult</c> that represents the result of the form when used as a dialog box.
        /// </returns>
        public DialogResult DialogResult
        {
            get { return Properties.DialogResult; }
        }

        #region IDisposable Members

        /// <summary>
        /// Disposes the associated Form.
        /// </summary>
        public void Dispose()
        {
            if (!explicitlyClosed)
                Close();
        }

        #endregion

        /// <summary>
        /// Closes the associated Form.
        /// </summary>
        public void Close()
        {
            Properties.Close();
            explicitlyClosed = true;
        }
    }
}